package com.glodon.paas.document.dao;

import static org.junit.Assert.*;

import java.util.Date;

import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.glodon.paas.document.dao.domain.RevisionEntity;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(value = { "classpath:test-document-dao.xml", "classpath:paas-document-dao-mysql.xml" })
@Ignore
public class RevisionDaoMySqlIT {

    String      defaultFieldId    = "defaultFieldId";
    String      defaultRevisionId = "defaultRevisionId";
    String      defaultId         = "defaultId";

    @Autowired
    RevisionDao revisionDao;

    @Test
    public void testCRUD() {
        RevisionEntity entity = null;

        // clear
        for (int i = 0; i < 5; i++) {
            revisionDao.delete(defaultId + i);
        }
        // insert
        for (int i = 0; i < 5; i++) {
            // insert 1
            entity = newRevisionEntity();
            entity.setId(defaultId + i);
            entity.setRevisionNumber(i);
            if (i == 4) {
                entity.setPartsCount(10);
            }
            assertEquals(defaultId + i, revisionDao.insert(entity));
        }
        // get
        assertEquals(1, revisionDao.get(defaultId + 1).getRevisionNumber().intValue());
        assertEquals(4, revisionDao.get(defaultId + 4).getRevisionNumber().intValue());
        // getLatestUnavailableRevision
        assertEquals(null, revisionDao.getLatestUnavailableRevision(defaultFieldId + "xx"));
        assertEquals(10, revisionDao.getLatestUnavailableRevision(defaultFieldId).getPartsCount().intValue());

        // delete
        assertEquals(0, revisionDao.delete(defaultId + 5));
        assertEquals(1, revisionDao.delete(defaultId + 4));

        // getRevision
        assertEquals(defaultId + 1, revisionDao.getRevision(defaultFieldId, 1).getId());
        assertEquals(null, revisionDao.getRevision(defaultFieldId + "xx", 1));
        assertEquals(null, revisionDao.getRevision(defaultFieldId, 9));

        // getRevisionsByFile
        assertEquals(0, revisionDao.getRevisionsByFile(defaultFieldId + "xx").size());
        assertEquals(4, revisionDao.getRevisionsByFile(defaultFieldId).size());

        for (int i = 0; i < 5; i++) {
            revisionDao.delete(defaultId + i);
        }
    }

    RevisionEntity newRevisionEntity() {
        RevisionEntity entity = new RevisionEntity();
        entity.seteTag("eTag");
        entity.setFileId(defaultFieldId);
        entity.setFileSize(100L);
        // entity.setId(defaultId)
        entity.setPartsCount(0);
        entity.setRevisionNumber(1);
        entity.setStorageKey("storageKey");
        entity.setTimestamp(new Date());
        return entity;
    }
}
